package com.wlsk.license.common.utils;

import com.wlsk.license.common.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;

@Slf4j
public class FileUtils {

    /**
     * 通过byte数组生成文件
     * @param data byte数组数据
     * @param filePath 文件路径
     * @return 是否生成成功
     */
    public static void createFileFromBytes(byte[] data, String filePath) {
        try (FileOutputStream fos = new FileOutputStream(filePath)) {
            fos.write(data);
            fos.flush();
        } catch (IOException e) {
            log.error("生成文件异常:{}", filePath, e);
            throw new BusinessException("包车牌下载到本地失败");
        }
    }
    /**
     * 使用Apache Commons Codec将文件转换为Base64
     * @param file 文件对象
     * @return Base64编码的字符串
     * @throws IOException 文件读取异常
     */
    public static String encodeFileToBase64(File file) throws IOException {
        byte[] fileContent = Files.readAllBytes(file.toPath());
        return Base64.encodeBase64String(fileContent);
    }

    /**
     * 使用流式处理大文件（避免内存溢出）
     * @param file 文件对象
     * @return Base64编码的字符串
     * @throws IOException 文件读取异常
     */
    public static String encodeLargeFileToBase64(File file) throws IOException {
        try (FileInputStream fileInputStream = new FileInputStream(file)) {
            byte[] bytes = new byte[(int) file.length()];
            fileInputStream.read(bytes);
            return Base64.encodeBase64String(bytes);
        }
    }

    /**
     * 将Base64字符串解码为字节数组
     * @param base64String Base64字符串
     * @return 解码后的字节数组
     */
    public static byte[] decodeBase64ToBytes(String base64String) {
        return Base64.decodeBase64(base64String);
    }
}
